strncat関数は、2つの文字列を長さを指定して連結します。
#include <string.h>
char *strncat(char *dest, const char *src, size_t n);
*destは連結先の文字列を指定します。
*srcは連結する文字列を指定します。*dest文字列に*src文字列を連結します。
nは連結する最大文字数を指定します。
戻り値として、第1引数*destのアドレスを返します。
*srcの長さがnより短い場合は、*srcの最後(ヌル文字)までが連結されます。また、nより長い場合は、nまで連結して、ヌル文字を付加します。
連結は*destに対して行いますので、*destは最低限「*dest自身の文字数+n+1」の大きさが必要です。
プログラム 例
#include <stdio.h>
#include <string.h>
#define STRING_MAX 51
char *StrChomp(char *);
int main()
{
char dest[STRING_MAX];
char src[STRING_MAX];
int cat_len;
printf('一つ目の文字列を入力してください(50文字以下) ==> ');
fgets(dest, STRING_MAX, stdin);
StrChomp(dest);
if (strlen(dest) < (STRING_MAX - 1)) {
/* 連結可能な文字数を算出 */
cat_len = STRING_MAX - strlen(dest) - 1;
printf('二つ目の文字列を入力してください(%d文字以下) ==> ', cat_len);
fgets(src, STRING_MAX, stdin);
StrChomp(src);
if (strlen(src) > cat_len) {
printf('二つ目の文字列の%d文字を連結します\n', cat_len);
}
printf('連結結果:%s\n', strncat(dest, src, cat_len));
}
else {
printf('一つ目の文字列が長すぎて連結できません\n');
}
return 0;
}
/* 改行削除 */
char *StrChomp(char *str)
{
char *str_p;;
for (str_p = str; *str_p; ++str_p)
;
if (*(str_p - 1) == '\n') {
*(str_p - 1) = '\0';
}
return str;
}
例の実行結果
$ ./strncat.exe 一つ目の文字列を入力してください(50文字以下) ==> abc 123 二つ目の文字列を入力してください(43文字以下) ==> ABC 456 連結結果:abc 123ABC 456 $